// * globalThis 被作为全局对象的标准名称加入到了 JavaScript 中，所有环境都应该支持该名称。所有主流浏览器都支持它。
// “老式”的环境特定的名字：window（浏览器）。global（Node.js）。
console.log(globalThis) // window/node.js 都支持（全局对象通用名称）

// * var 和 function 关键字，声明的变量/函数会成为全局对象的属性。let/const 声明的不会。
var a = 1
console.log(window.a) // 1

function fn() {
	console.log('fn')
}
console.log(window.fn) // fn

let g = 3
console.log(window.g) // undefined

// * 可以直接往全局对象（window）中添加属性。
// 一般不建议使用全局变量。全局变量应尽可能的少。
// 与使用外部变量或全局变量相比，函数获取“输入”变量并产生特定“输出”的代码设计更加清晰。
window.currentUser = {
	name: 'Jake',
}
console.log(window.currentUser.name) // Jake

// * 使用 polyfills
// 创建 “polyfills”：添加环境不支持但在现代标准中存在的功能。

// 例子：比如老版本的浏览器不支持 Promise 对象。我们就可以创建 polyfills 来解决。
if (!window.Promise) {
	console.log('polyfill for Promise')
	window.Promise = function (fn) {
		// ...
	}
}
